package com.sharefang.aproject.utils;

import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;


import com.sharefang.aproject.BaseApplication;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.File;
import java.io.Serializable;

/**
 * 缓存管理工具类
 *
 * @author Lei 2016年7月29日15:02:43
 */

public class CacheHelper {
    private static ACache aCache = ACache.get(BaseApplication.getInstance().getApplicationContext());

    public static void setupACache() {
        aCache = ACache.get(BaseApplication.getInstance().getApplicationContext());
    }

    public static void setupACache(String cacheName) {
        aCache = ACache.get(BaseApplication.getInstance().getApplicationContext(), cacheName);
    }

    public static void setupACache(int maxSize, int maxCount) {
        aCache = ACache.get(BaseApplication.getInstance().getApplicationContext(), maxSize, maxCount);
    }

    public static void setupACache(File cachedir) {
        aCache = ACache.get(cachedir);
    }

    public static void setupACache(File cachedir, int maxSize, int maxCount) {
        aCache = ACache.get(cachedir, maxSize, maxCount);
    }

    /**
     * 移除某个key
     *
     * @param key
     * @return 是否移除成功
     */
    public static boolean remove(String key) {
        return aCache.remove(key);
    }

    /**
     * 清除所有数据
     */
    public static void clear() {
        aCache.clear();
    }

    /**
     * 保存 String数据 到 缓存中
     *
     * @param key   保存的key
     * @param value 保存的String数据
     */
    public static void put(String key, String value) {
        aCache.put(key, value);
    }

    /**
     * 保存 String数据 到 缓存中
     *
     * @param key      保存的key
     * @param value    保存的String数据
     * @param saveTime 保存的时间，单位：秒
     */
    public static void put(String key, String value, int saveTime) {
        aCache.put(key, value, saveTime);
    }

    /**
     * 读取 String数据
     *
     * @param key
     * @return String 数据
     */
    public static String getAsString(String key) {
        return aCache.getAsString(key);
    }

    /**
     * 保存 JSONObject数据 到 缓存中
     *
     * @param key   保存的key
     * @param value 保存的JSON数据
     */
    public static void put(String key, JSONObject value) {
        aCache.put(key, value);
    }

    /**
     * 保存 JSONObject数据 到 缓存中
     *
     * @param key      保存的key
     * @param value    保存的JSONObject数据
     * @param saveTime 保存的时间，单位：秒
     */
    public static void put(String key, JSONObject value, int saveTime) {
        aCache.put(key, value, saveTime);
    }

    /**
     * 读取JSONObject数据
     *
     * @param key
     * @return JSONObject数据
     */
    public static JSONObject getAsJSONObject(String key) {
        return aCache.getAsJSONObject(key);
    }

    /**
     * 保存 JSONArray数据 到 缓存中
     *
     * @param key   保存的key
     * @param value 保存的JSONArray数据
     */
    public static void put(String key, JSONArray value) {
        aCache.put(key, value);
    }

    /**
     * 保存 JSONArray数据 到 缓存中
     *
     * @param key      保存的key
     * @param value    保存的JSONArray数据
     * @param saveTime 保存的时间，单位：秒
     */
    public static void put(String key, JSONArray value, int saveTime) {
        aCache.put(key, value, saveTime);
    }

    /**
     * 读取JSONArray数据
     *
     * @param key
     * @return JSONArray数据
     */
    public static JSONArray getAsJSONArray(String key) {
        return aCache.getAsJSONArray(key);
    }

    /**
     * @param fileDir  存储的文件路径
     * @param filename 文件的名称
     * @return file的绝对路径
     */
    public static String putFile(File fileDir, String filename) {
        return aCache.putFile(fileDir, filename);
    }

    /**
     * @param filename 文件名称
     * @return 文件的绝对路径
     */
    public static String put(String filename) {
        return aCache.put(filename);
    }

    /**
     * 获取缓存文件
     *
     * @param key
     * @return value 缓存的文件
     */
    public static File getFile(String key) {
        return aCache.file(key);
    }

    /**
     * 获取文件路径
     *
     * @param fileDir
     * @param filename
     * @return
     */
    public static String getFilePath(File fileDir, String filename) {
        return aCache.getFile(fileDir, filename);
    }

    /**
     * 获取文件路径
     *
     * @param destFilePath
     * @return
     */
    public static String getFilePath(String destFilePath) {
        return aCache.getFile(destFilePath);
    }

    /**
     * 保存 byte数据 到 缓存中
     *
     * @param key   保存的key
     * @param value 保存的数据
     */
    public static void put(String key, byte[] value) {
        aCache.put(key, value);
    }

    /**
     * 保存 byte数据 到 缓存中
     *
     * @param key      保存的key
     * @param value    保存的数据
     * @param saveTime 保存的时间，单位：秒
     */
    public static void put(String key, byte[] value, int saveTime) {
        aCache.put(key, value, saveTime);
    }

    /**
     * 获取 byte 数据
     *
     * @param key
     * @return byte 数据
     */
    public static byte[] getAsBinary(String key) {
        return aCache.getAsBinary(key);
    }

    /**
     * 保存 Serializable数据 到 缓存中
     *
     * @param key   保存的key
     * @param value 保存的value
     */
    public static void put(String key, Serializable value) {
        aCache.put(key, value);
    }

    /**
     * 保存 Serializable数据到 缓存中
     *
     * @param key      保存的key
     * @param value    保存的value
     * @param saveTime 保存的时间，单位：秒
     */
    public static void put(String key, Serializable value, int saveTime) {
        aCache.put(key, value, saveTime);
    }

    /**
     * 读取 Serializable数据
     *
     * @param key
     * @return Serializable 数据
     */
    public static Object getAsObject(String key) {
        return aCache.getAsObject(key);
    }

    /**
     * 保存 bitmap 到 缓存中
     *
     * @param key   保存的key
     * @param value 保存的bitmap数据
     */
    public static void put(String key, Bitmap value) {
        aCache.put(key, value);
    }

    /**
     * 保存 bitmap 到 缓存中
     *
     * @param key      保存的key
     * @param value    保存的 bitmap 数据
     * @param saveTime 保存的时间，单位：秒
     */
    public static void put(String key, Bitmap value, int saveTime) {
        aCache.put(key, value, saveTime);
    }

    /**
     * 读取 bitmap 数据
     *
     * @param key
     * @return bitmap 数据
     */
    public static Bitmap getAsBitmap(String key) {
        return aCache.getAsBitmap(key);
    }

    /**
     * 保存 drawable 到 缓存中
     *
     * @param key   保存的key
     * @param value 保存的drawable数据
     */
    public static void put(String key, Drawable value) {
        aCache.put(key, value);
    }

    /**
     * 保存 drawable 到 缓存中
     *
     * @param key      保存的key
     * @param value    保存的 drawable 数据
     * @param saveTime 保存的时间，单位：秒
     */
    public static void put(String key, Drawable value, int saveTime) {
        aCache.put(key, value, saveTime);
    }

    /**
     * 读取 Drawable 数据
     *
     * @param key
     * @return Drawable 数据
     */
    public static Drawable getAsDrawable(String key) {
        return aCache.getAsDrawable(key);
    }
}
